1. Field Of The Invention
The present invention relates generally to the field of computer programming and more specifically to an interactive method for building and representing computer programs, and their control constructs, as visualizations or visual expressions in the form of shapes, such as lines, arrows, strokes, or directed paths, or a plurality of such visualizations that map to a plurality of multifarious, textual computer programming language control constructs.
2. Description Of Related Art
Software development is complex and buggy. As complexity continues to increase, our ability to comprehend the architecture and operation of large software systems as well as the ability to create large, complex software systems correspondingly decreases resulting in an ever-increasing gap, which has been referred to as the software crisis. The Wikipedia.org website defines the software crisis as a term used early in the days of software engineering, before it was a well-established subject, to describe the impact of the rapid increases in computer power and the complexity of the problems which could be tackled. It refers, in essence, to the difficulty of writing correct, understandable and verifiable computer programs.
Over the last century, the task of programming a computer has been marked with progressively discrete levels of abstraction away from underlying hardware. This progression will be described below up to the most recent modeling technologies that have been produced to grapple with voluminous amounts of code. State-of-the-art modeling paradigms show no signs of traction.
There is no silver bullet to date regarding the software crisis. Historically, the software industry has attempted to evolve programming with more and more incarnations of character-based languages to deal with the ever-increasing complexity and speed with which to program.
The use of computers and computer languages can be traced back to the nineteenth century. Charles Babbage's difference engine in 1822 was programmed to execute a task by changing gears, which made calculations.
Eventually, mechanical motion was replaced by electrical signals in a first generation digital computer in 1942. Execution then became a tedious task of resetting switches and rewiring the entire system—similar to the original telephone switchboards. The computer operator was a scientist that needed to intimately know the machine's instruction set. This instruction set consists of a seemingly endless stream of 1's and 0's, which are the machine language of digital computers.
After core memory was developed, programs could be easily loaded into memory and subsequently the CPU manually by flipping toggle switches. Address switches were set, then data switches, then a WRite switch. This process was repeated for all data and instructions, then the run switch was toggled.
Punch cards and paper tape were the proven input technology of the mid-nineteenth century and had been around since the early 1800's. Naturally, instructions ultimately were then stored on paper via hex keypads or terminals.
The first computer programming language for electronic computers was Short Code. It appeared in 1949 and operators manually changed shorthand statements such as JMP, BR or SUB, into 1's and 0's. In 1951 Grace Hopper wrote the first compiler, A-0, which translates a language's statements into 0's and 1's. Although easier to write and understand than machine language, operators still had to intimately understand how a computer functioned in order to create a working program.
The first high-level language, FORTRAN, appeared in 1957 and was used on second generation digital computers that used transistors instead of vacuum tubes. It's control constructs were limited to IF, DO and GOTO statements, which were a vast improvement over simple mnemonics such as JMP and BR used by assembly code. Data structures today can be traced back to FORTRAN 1. Other languages followed like COBOL for business applications, and Lisp for artificial intelligence. Programmers were insulated from the actual hardware by computer operators who were handed stacks of punch cards to feed into the machines.
Imperative languages (high-level languages centered around assignment statements) flourished during the third generation of digital computers, which shrank in size, due to the integrated circuit, but grew in capacity. Algol, BASIC, Pascal, Simula, Smailtalk, PL/1, and CPL are just a few, each with their own contribution. For example, CPL evolved into BCPL, that evolved into B, which subsequently paved the way for C. C is the first portable language that allowed a program written for one type of machine to be compiled and run on many other machines, again further removing the programmer from the underlying hardware. C has been one of the most popular programming languages for over 25 years.
C, with the help of Simula, spawned the object oriented computer language C++. The late 80's and early 90's saw object oriented languages dominate the scene. Smalltalk and C++ influenced the creation of Java, which influenced the creation of the now modern and state-of-the-art computer programming language C#.
FIG. 1 illustrates a block diagram depicting the different layers of abstraction programming languages have provided over the evolution of prior art in the field of programming, which insulate or distance the computer programmer from the underlying hardware. Block 1200 depicts the computer hardware that executes desired tasks since the first electronic computers were developed in the 20th century. Block 1210 depicts the machine language of digital computers—ones and zeros. Block 1220 depicts low-level assembly languages which appeared in the mid 20th century and are compiled down to machine language for the computer to understand. Block 1240 depicts high-level languages that flourished during the third generation of computers during the mid-to-late 20th century and are also compiled or interpretted. Block 1230 depicts a middle-ware approach inserted between high-level and low-level languages that have become widely popular beginning in the late 20th century to the present.
Looking at the history of programming languages, it is seen that most features are general and are available in many languages. It can be appreciated that many features of modern languages have been around for years. It can also be seen how the programmer's knowledge of the underlying hardware has been diminished over time.
There have been many attempts to address the way computers are programmed using visual programming languages over the past few decades. A visual language manipulates visual information or supports visual interaction, or allows programming with visual expressions. This is taken to be the definition of a visual programming language. Visual programming languages may be classified according to the type and extent of visual expression used: into icon-based languages, form-based languages, or diagram languages. Visual programming environments provide graphical or iconic elements which can be manipulated by the user in an interactive way according to some specific spatial grammar for program construction.
Current state-of-the-art visual programming is often referred to as iconic programming or executable graphics. Some visual languages are mere data flow models. A broader definition is systems that use graphics to aid in the programming, debugging and understanding of computer programs. This can include UML, Unified Modeling Language. A simple list of prior art follows.
One attempt to use flow diagrams is disclosed in U.S. Pat. No. 5,301,336, entitled “Graphical Method For Programming A Virtual Instrument”, issued to Kodosky et al. on 5 Apr. 1994. Here, a GUI, or Graphical User Interface, utilizes data flow diagrams to represent a given procedure. Data flow diagrams are assembled in response to user input, again using icons, which correspond to executable functions, scheduling functions and data types and are interconnected by arcs on the screen.
One attempt using icons is disclosed in U.S. Pat. No. 5,313,575, entitled “Processing Method For An Iconic Programming System”, issued to Beethe on 17 May 1994. This system is based on an iconic programming system which enables a programmer to create programs by connecting or linking various icons together to comprise a program.
Yet another attempt, this time with modeling, lies in U.S. Pat. No. 5,325,533, entitled “Engineering System For Modeling Computer Programs”, issued to McInerney et al. on 28 Jun. 1994. This system provides a human oriented object programming system where modeling is used to assist in the development of computer programs.
Visual Basic and the entire Microsoft Visual™ family are not, despite their names, visual programming languages. They are textual languages which use a graphical GUI builder to make programming interfaces easier on the programmer.